//
//  LWStatusTableViewCell.swift
//  LW_Weibo
//
//  Created by 刘伟 on 16/7/13.
//  Copyright © 2016年 LWSpro. All rights reserved.
//

import UIKit
import SnapKit

//设置间距  全局的
let HomeCellMargin: CGFloat = 10

class LWStatusTableViewCell: UITableViewCell {
    
    //  记录toolbar顶部约束  因为有转发和没转发时,toolBar的顶部约束是在改变的  因为cell会在缓存池中重用 所以每次为cell内的视图赋值时,我们就要将冲突的约束删除 重新添加约束
    var toolbarTopConstraint: Constraint? //记录toolbar顶部约束

    
    
    //添加一个属性 目的是为给其他视图赋值
    var statusViewModel: LWStatusViewModel? {
        
        didSet { //这个方法 相当于重写set方法
            
            originalView.statusViewModel = statusViewModel
            
            
            //每次为cell的toolBar视图赋值前,先删除其顶部约束
            toolbarTopConstraint?.uninstall()
          
            //判断有没有转发微博
            if statusViewModel?.status?.retweeted_status != nil { //有转发微博 即转发微博有内容 不为nil
                
                //有转发微博就赋值
                retweetView.statusViewModel = statusViewModel
                
                //显示转发微博
                retweetView.hidden = false
                
                //然后重新添加约束
                toolBar.snp_updateConstraints(closure: { (make) -> Void in
                    
                    //记录添加的约束
                    self.toolbarTopConstraint = make.top.equalTo(retweetView.snp_bottom).constraint
                    
                    
                    
                    
                })
                
                
                
            }else { //没有转发微博 
                
                
                //没有转发微博 那么就不显示出来  只是不显示 并不代表被移除了 控件仍然存在  只是没有内容 注意:从缓存池中取出来，转发微博视图还是拥有上一个retweetView 的约束的 如果显示的话,那么就可能出现toolBar 和 originalView 之间有一个retweetView 的高度 所以我们要用toolBar  遮住它
                retweetView.hidden = true

                
                //重新添加约束
                toolBar.snp_updateConstraints(closure: { (make) -> Void in
                    
                    //记录添加的约束
                    self.toolbarTopConstraint = make.top.equalTo(originalView.snp_bottom).constraint

                    
                })

                
                
            }
            
            
            
            
            
            
            
            toolBar.statusViewModel = statusViewModel
            
        }
        
    }

    //分三个视图  第一个原创视图
    private lazy var originalView: LWStatusOriginalView = LWStatusOriginalView()
    
    private lazy var retweetView: LWStatusRetweetView = LWStatusRetweetView()
    
    private lazy var toolBar: LWStatusToolBar = LWStatusToolBar()
    
    
    
    
    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        
        super.init(style: style, reuseIdentifier: reuseIdentifier)

        
        //相当于cell一创建出来就是约束好了的模式 然后我们根据网络返回的数据,去重新给cell添加约束 在didSet方法里面
        //约束
        layoutUI()
        

    }

    
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
    
    //MARK: - 布局
    private func layoutUI() {
        
        //设置cell的背景色 需要注意的是:一更改cell的背景色 那么cell内的视图如果是clearColor那么也会显示成背景色 所以需要更改 内部视图的颜色
        contentView.backgroundColor = UIColor(white: 0.95, alpha: 1)
        
        //添加控件
        contentView.addSubview(originalView)
        contentView.addSubview(retweetView)
        contentView.addSubview(toolBar)

        originalView.snp_makeConstraints { (make) -> Void in
            
            //这个约束是让每个cell之间出现一个分组效果 但实际每个cell之间并没有间距 只是让原创微博约束了10
            make.top.equalTo(contentView).offset(HomeCellMargin)
            
            make.leading.trailing.equalTo(contentView)
            
            
            
        }
        
        
        retweetView.snp_makeConstraints { (make) -> Void in
            
            make.top.equalTo(originalView.snp_bottom)
            
            make.leading.trailing.equalTo(originalView)
            
            
        }

        
        
        toolBar.snp_makeConstraints { (make) -> Void in
            
            
            //这里记录一下顶部约束
           self.toolbarTopConstraint = make.top.equalTo(retweetView.snp_bottom).constraint
            
            make.height.equalTo(36)
            
            make.leading.trailing.equalTo(originalView)
            
            
        }
        
        
        
        
        contentView.snp_makeConstraints { (make) -> Void in
            
            //这里要写全 也就是  对cell的contentView  的约束必须添加全  因为contentView 也是添加到cell上的
            make.bottom.equalTo(toolBar)
            
            //这个self就是cell
            make.top.leading.trailing.equalTo(self)
            
            
        }
        
        
        
        
    }
    
    
    
    
    
    
    
    
    
    
    
}
